﻿using System;
namespace Caledar
{/// <summary>
/// 输出任一年的日历
/// </summary>
    class Program
    {  //设置全局静态变量x,y，用于确定坐标
        static int x=0,y=0;
        static void Main()
        {
            Console.WriteLine("请输入年份");
            int year = int.Parse(Console.ReadLine());
            //打印出每月
            for (int month = 1; month < 13; month++)
            {   //定义每月初始日期
                DateTime theday = new DateTime(year, month, 1);
                //确定每一个月的位置
                x = (theday.Month - 1) % 3 * 30;
                y = (theday.Month - 1) / 3 * 10 + 2;
                Console.SetCursorPosition(x+9, y);
                Console.WriteLine($"{month}月");
                Console.SetCursorPosition(x, y += 1);
                Console.WriteLine("日 一 二 三 四 五 六");
                Console.SetCursorPosition(x, y += 1);
                //得到每月的第一天是星期几
                int monthfirstday = (int)theday.DayOfWeek;
                //输出每月第一天前的空格
                for (int i = 0; i < monthfirstday; i++)
                {
                    Console.Write("   ");
                }
                //得到每月有多少天
                int days = DateTime.DaysInMonth(year, month);
                //输出每月的第一行
                if (monthfirstday == 6)
                    Console.Write("1");
                else for (int i = 1; i < (8 - monthfirstday); i++)
                    {
                        Console.Write($"{i}  ");
                    }
                //开始输出其余的行
                Console.SetCursorPosition(x, y += 1);
                int j = 0;
                for (int i = (8 - monthfirstday); i <= days; i++)
                {
                    if (i < 10)
                        Console.Write($"{i}  ");
                    else if (i >= 10)
                        Console.Write($"{i} ");
                    j++;
                    if (j % 7 == 0)
                        Console.SetCursorPosition(x, y += 1);
                }
            }
        }
    }
}